#ifndef IOT_ADMIN_FUNCTION
#define IOT_ADMIN_FUNCTION

#define OK 1    // 定义常量 OK 为 1
#define ERROR 0 // 定义常量 ERROR 为 0
// 定义结构体 Engine，用于存储工程师信息
typedef struct Engine
{
  char ID[5];                // 工程师的工号（账号）
  char name[20];             // 工程师的姓名
  char tel[20];              // 工程师的电话
  int year;                  // 工程师的工龄
  char password[20];         // 工程师的密码
  int times;                 // 工程师检修次数
  char AdminPassword[20];    // 管理员密码
  char Adminaccount[20];     // 管理员账号
  char EngineerPassword[20]; // 工程师密码
  struct Engine *next;       // 指向下一个工程师信息节点的指针

} Engineer, *LinkList;

// 定义结构体 Equ，用于存储设备信息
typedef struct Equ
{
  char ID[5];       // 设备的编号
  char state[30];   // 设备的状态
  int count;        // 设备检修的次数
  char data[20];    // 设备检修的日期
  char gps[20];     // 设备的安装地点
  struct Equ *next; // 指向下一个设备信息节点的指针

} Equipment, *EquipmentLink;

/****************************************函数声明区********************************/
void IOT_Admin_Function(LinkList Head, EquipmentLink Arm); // 管理员功能函数

int IOT_InitLinkList(LinkList *Head); // 初始化链表

int IOT_AddEngineer(LinkList Head); // 添加工程师信息

int IOT_ShowEngineer(LinkList Head); // 显示所有工程师信息

int IOT_DelEngineer(LinkList Head); // 删除指定工程师信息

int IOT_FindEngineer(LinkList Head); // 查找指定工程师信息

int IOT_ReviseEngineer(LinkList Head); // 修改指定工程师信息

int IOT_ClearEngineer(LinkList Head); // 清空所有工程师信息

int compareEngineersBytimes(Engineer *p, Engineer *q); // 比较两个工程师的检修次数

void swapNodes(Engineer *a, Engineer *b); // 交换两个工程师节点的位置

void sortEngineersFromSecond(LinkList *start); // 从第二个节点开始对工程师链表进行排序

int IOT_EquipmentInitLink(EquipmentLink *Arm); // 初始化设备链表

int IOT_EquipmentAddLink(EquipmentLink Arm); // 添加设备信息

int IOT_EquipmentShowLink(EquipmentLink Arm); // 显示所有设备信息

int IOT_EquipmentDelLink(EquipmentLink Arm); // 删除指定设备信息

int IOT_EquipmentFindLink(EquipmentLink Arm); // 查找指定设备信息

int IOT_EquipmentReviseLink(EquipmentLink Arm); // 修改指定设备信息

int IOT_EquipmentClearLink(EquipmentLink Arm); // 清空所有设备信息

int compareEquipmentsBycount(Equipment *p, Equipment *q); // 比较两个设备的检修次数

void swapEqusNodes(Equipment *a, Equipment *b); // 交换两个设备节点的位置

void sortEquipmentsFromSecond(EquipmentLink *start); // 从第二个节点开始对设备链表进行排序

void IOT_AExit(); // 退出

#endif // 结束宏定义